/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.edu.fatec.ads.bo;

import br.edu.fatec.ads.classes.Cartao;
import br.edu.fatec.ads.classes.Emprestimo;
import br.edu.fatec.ads.classes.Livro;
import br.edu.fatec.ads.dao.HibernateGenericDAO;
import br.edu.fatec.ads.util.CriteriosUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Criterion;

/**
 *
 * @author Ubirajara
 */
public class BusinessObjectEmprestimo implements IBusinessObject{

    private HibernateGenericDAO dao = null;

    public BusinessObjectEmprestimo() {
        dao = new HibernateGenericDAO(Emprestimo.class);
    }

    public void beginTransaction() {
        dao.beginTransaction();
    }

    public void commitTransaction() {
        dao.commitTransaction();
    }

    public void rollbackTransaction() {
        dao.rollbackTransaction();
    }

    public void clearSession() {
        dao.clearSession();
    }

    public int inserir(Emprestimo emprestimo)
        throws HibernateException{
        
        return (Integer) dao.save(emprestimo);
    }

    public boolean hasEmprestimosAtivos(Livro livro){
        Map<String, Object> criteriosBusca = new HashMap<String, Object>();
        Map<String, Object> camposValores = new HashMap<String, Object>();
        List<String> campos = new ArrayList<String>();
        List<Emprestimo> emprestimos = Collections.EMPTY_LIST;

        camposValores.put("livro.codigo", livro.getCodigo());
        campos.add("dataDevolucao");

        criteriosBusca.put(CriteriosUtil.CRITERIOS_OBJETO, camposValores);
        criteriosBusca.put(CriteriosUtil.CRITERIOS_IS_NULL, campos);

        List<Criterion> criteriosConvertidos = CriteriosUtil.getInstance().montaCriterios(criteriosBusca);

        try{
            emprestimos = (List<Emprestimo>) dao.findByCriterion(criteriosConvertidos);
        }catch(HibernateException cause){
            cause.printStackTrace();
        }
        
        return !emprestimos.isEmpty();
    }

    public boolean hasLessThan2Emprestimos(Cartao cartao){
        Map<String, Object> criteriosBusca = new HashMap<String, Object>();
        Map<String, Object> camposValores = new HashMap<String, Object>();
        List<String> campos = new ArrayList<String>();
        List<Emprestimo> emprestimos = Collections.EMPTY_LIST;

        camposValores.put("cartao.codigo", cartao.getCodigo());
        campos.add("dataDevolucao");

        criteriosBusca.put(CriteriosUtil.CRITERIOS_OBJETO, camposValores);
        criteriosBusca.put(CriteriosUtil.CRITERIOS_IS_NULL, campos);

        List<Criterion> criteriosConvertidos = CriteriosUtil.getInstance().montaCriterios(criteriosBusca);

        try{
            emprestimos = (List<Emprestimo>) dao.findByCriterion(criteriosConvertidos);
        }catch(HibernateException cause){
            cause.printStackTrace();
        }

        return emprestimos.size() < 2;
    }

}